#include "stdafx.h"
#include "GetFile.h"

FILE *tmp;
char adres[255],sciezka[255];

void setup(const char *URL){
	    int i,n=0;
		for(int j=0;j<255;j++) {
			adres[j] = 0;
			sciezka[j] = 0;
		}
        for(i=0;i<7;i++){
                adres[i]=tolower(URL[i]);
        };
        adres[7]='\0';
        
		if(strcmp(adres,"http://")==0)
		{
			i=7;
			while(URL[i]!='/'){
			adres[i-7]=URL[i];
			i++;
		}
        adres[i-7]='\0';
                
        for(n=0;n<(strlen(URL)-i);n++){
                sciezka[n]=URL[n+i];
        };
        }
		else
		{
			i=0;
			while(URL[i]!='/'){
			adres[i]=URL[i];
			i++;
			}
		
        adres[i]='\0';
                
        for(n=0;n<(strlen(URL)-i);n++){
                sciezka[n]=URL[n+i];
		}
		sciezka[n] = '\0';
		}
		
       

			
};


void pobierz(LPCSTR lpServerName, LPCSTR lpFileName)
{
	
	IN_ADDR		iaHost;
	LPHOSTENT	lpHostEntry;

	iaHost.s_addr = inet_addr(lpServerName);
	//sprawdzenie czy podany zostal adres IP, czy adres serwa
	if (iaHost.s_addr == INADDR_NONE)
	{
		lpHostEntry = gethostbyname(lpServerName);
	}
	else
	{
		
		lpHostEntry = gethostbyaddr((const char *)&iaHost, 
						sizeof(struct in_addr), AF_INET);
	}
	//sprawdzenie czy uzyskanie adresu powiodlo sie
	if (lpHostEntry == NULL)
	{
		//PRINTERROR("gethostbyname()");
		return;
	}


	
	SOCKET	Socket;	

	Socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (Socket == INVALID_SOCKET)
	{
		//PRINTERROR("socket()"); 
		return;
	}


	
	//ustalenie portu uslugi http
	
	LPSERVENT lpServEnt;
	SOCKADDR_IN saServer;

	lpServEnt = getservbyname("http", "tcp");
	if (lpServEnt == NULL)
		saServer.sin_port = htons(80);
	else
		saServer.sin_port = lpServEnt->s_port;


	
	//usupelnienie struktury adresu
	
	saServer.sin_family = AF_INET;
	saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);


	//polaczenie
	int nRet;

	nRet = connect(Socket, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
	if (nRet == SOCKET_ERROR)
	{
		//PRINTERROR("connect()");
		closesocket(Socket);
		return;
	}

	
	//wysylanie prosby do serwera
	char szBuffer[1024];

	sprintf(szBuffer, "GET %s\n", lpFileName);
	nRet = send(Socket, szBuffer, strlen(szBuffer), 0);
	if (nRet == SOCKET_ERROR)
	{
		//PRINTERROR("send()");
		closesocket(Socket);	
		return;
	}

	//odbior odpowiedzi
	while(1)
	{
		
		nRet = recv(Socket, szBuffer, sizeof(szBuffer), 0);
		if (nRet == SOCKET_ERROR)
		{
			//PRINTERROR("recv()");
			break;
		}

		//fprintf(stderr,"\nrecv() returned %d bytes", nRet);

		//zakonczenie
		if (nRet == 0)
			break;
		// zapis do pliku
        fwrite(szBuffer, nRet, 1, tmp);
	}
	//koniec
	closesocket(Socket);	
	
};



void GetFile(const char* URL){
	
	WORD wVersionRequested = MAKEWORD(1,1);
	WSADATA wsaData;
	int nRet;
	
	tmp=fopen("C:/Documents and Settings/RedDot/net.rdt","w");
	
	// inicjalizacja WinSock.dll
	nRet = WSAStartup(wVersionRequested, &wsaData);
	if (nRet)
	//sprawdzenie czy sie powiodlo
	{
		fprintf(stderr,"\nWSAStartup(): %d\n", nRet);
		WSACleanup();
		return;
	}
	
	
	//zprawdzanie werscji winsocka
	
	if (wsaData.wVersion != wVersionRequested)
	{
		fprintf(stderr,"\nWinSock version not supported\n");
		WSACleanup();
		return;
	}
	setup(URL);
	pobierz(adres,sciezka);

	
	// czyszczenie	
	fclose(tmp);
	WSACleanup();
	
};